function [x_min, fval_min] = global_min_fminbnd(fun, lb, ub, numStarts)
% 使用多起点 fminbnd 近似寻找一维函数的全局最小值
%
% 输入参数：
%   fun        - 目标函数句柄 @(x)
%   lb, ub     - 搜索区间 [lb, ub]
%   numStarts  - 起始区间数量（越多越稳妥，默认20）
%
% 输出参数：
%   x_min      - 最小值对应的 x
%   fval_min   - 最小值

    if nargin < 4
        numStarts = 10;  % 默认分成 10 个子区间
    end

    % 预分配
    results = zeros(numStarts, 2);
    xPoints = linspace(lb, ub, numStarts + 1);

    % 在每个小区间内调用一次 fminbnd
    for i = 1:numStarts
        [x, fval] = fminbnd(fun, xPoints(i), xPoints(i+1));
        results(i, :) = [x, fval];
    end

    % 取所有结果中最优解
    [fval_min, idx] = min(results(:,2));
    x_min = results(idx, 1);
end
